<?php
/**
 * Twitter/Apalog モデル
 *
 * @package 	apamanshop
 * @author　	ishibashi-t
 * @copyright　	
 * @date 		2011/08/19 新規作成
 * @note
 * 	加盟店サイト（メンバーサイト）恒久対応
 */
class Shop_Model_TweetAndBlog extends Shop_Model_Base{

	/**
	 * Tweet,Blog存在チェック
	 * @param unknown_type $params
	 * @note
	 *  加盟店サイト（メンバーサイト）恒久対応
	 * 		1件以上存在した場合、それぞれ１をセット
	 * 		Ex. 	APALOG	TWEET
	 * 				1		0
	 */
    public function getExistRecord($params)
    {
        $db_params = array();
	    $sql="";
	    $sql=$sql . " SELECT";
	    $sql=$sql . "     (SELECT";
	    $sql=$sql . "         1";
	    $sql=$sql . "     FROM";
	    $sql=$sql . "         T103APALOG";
	    $sql=$sql . "     WHERE";
	    $sql=$sql . "         T103_TENPO_CD='{$params['ShopCd']}' AND";
	    $sql=$sql . "         rownum=1";
	    $sql=$sql . "     ) as BLOG,";
	    $sql=$sql . "     (SELECT";
	    $sql=$sql . "         1";
	    $sql=$sql . "     FROM";
	    $sql=$sql . "         T102TWEETS";
	    $sql=$sql . "     WHERE";
	    $sql=$sql . "         T102_TWITTER_ACCOUNT=(SELECT";
	    $sql=$sql . "                                     M96_TWITTER_ACCOUNT";
	    $sql=$sql . "                                 FROM";
	    $sql=$sql . "                                     M96MINIBLOG";
	    $sql=$sql . "                                 WHERE";
	    $sql=$sql . "                                     M96_TENPO_CD='{$params['ShopCd']}'";
	    $sql=$sql . "                                 ) AND";
	    $sql=$sql . "         rownum=1";
	    $sql=$sql . "     ) as TWEET";
	    $sql=$sql . " FROM";
	    $sql=$sql . "     dual";
		$ret = $this->dbGetList($sql, $db_params);
        return $ret[0];
    }

    /**
     * Tweet,Blog一覧データ取得用SQL文の取得
     * 
     * Tweet,Blog一覧データ取得用SQL文の取得を行う
     * 
     * @param unknown_type $params
     * @param unknown_type $db_params
     */
    protected function generateSql($params, &$db_params)
    {
		//フリーワード検索キーワードあり時
		if($params['search']){
			// OracleText利用時はCONTAINS文をOR条件で複数利用できないので注意
			// 	また、バッチ処理でINDEXの定時更新を行う必要がある
			/*	その際は、下記をOracleSeverに仕込む必要ある(現状の.comのFreeWord検索と同様)
				INDEXの更新 		所要時間：数秒		→Twitter,Apalog収集デーモンの終了時に行うようにしたが、多いほどリアルタイム性が高くなる
				execute ctx_ddl.sync_index('IDX_T103_POSTED_TITLE');
				execute ctx_ddl.sync_index('IDX_T103_POSTED_TEXT');
				execute ctx_ddl.sync_index('IDX_T102_POSTED_BODY');
				INDEXの最適化 		所要時間：数十分	断片化を防ぐため、週１回？月１回は実行か？バッチに仕込むのを検討。ただし更新を止める必要あり。
				execute CTX_DDL.OPTIMIZE_INDEX('IDX_T103_POSTED_TITLE','FULL');
				execute CTX_DDL.OPTIMIZE_INDEX('IDX_T103_POSTED_TEXT','FULL');		//長い１０分くらい
				execute CTX_DDL.OPTIMIZE_INDEX('IDX_T102_POSTED_BODY','FULL');
				--FASTは試してないが、データをRemoveしないとのことで若干早いらしい
			*/
			$t102_oracle_text = "AND (CONTAINS( T102_POSTED_BODY ,'".$params['search']."' ,1 ) > 0)";
			$t103_oracle_text1 = "AND (CONTAINS( T103_POSTED_TITLE ,'".$params['search']."' ,1 ) > 0)";
			$t103_oracle_text2 = "AND (CONTAINS( T103_POSTED_TEXT ,'".$params['search']."' ,1 ) > 0)";

			/* 今のところLike文でもレスポンス問題ないが・・・ */
//			$t102_oracle_text = "AND T102_POSTED_BODY LIKE '%".$params['search']."%' ";
//			$t103_oracle_text1 = "AND T103_POSTED_TITLE LIKE '%".$params['search']."%' ";
//			$t103_oracle_text2 = "AND T103_POSTED_TEXT LIKE '%".$params['search']."%' ";
		}

$sql_cmn = <<< docEnd
	select rownum rn,FLG,ID,TENPO_CD,TEXT,YMD,ICON_URL,LINK_URL,USR from (
		SELECT
		    'tweet'                 as FLG ,
		    T102_ENTRY_ID           as ID,
		    M.M96_TENPO_CD          as TENPO_CD,
		    T102_POSTED_BODY        as TEXT,
		    TO_CHAR(T102_POSTED_DATE,'YYYY/MM/DD')  as YMD ,
		    'http://twitter.com/' || T102_TWITTER_ACCOUNT || '/status/' || T102_ENTRY_ID as LINK_URL,
		    M96_TWITTER_ICON_URL    as ICON_URL ,
		    T102_POSTED_USER        as USR
		FROM
		    T102TWEETS T
		    LEFT JOIN M96MINIBLOG M
		    ON T.T102_TWITTER_ACCOUNT = M.M96_TWITTER_ACCOUNT
		WHERE
		    T102_DELETE_FLG=0
		    AND M.M96_TENPO_CD='{$params['ShopCd']}'
			{$t102_oracle_text}
		UNION
		SELECT
		    'blog'              as FLG ,
		    'apalog00000' || T103_ENTRY_ID  as ID,
		    T103_TENPO_CD       as TENPO_CD,
		    SUBSTR(T103_POSTED_TITLE || '　' || T103_POSTED_TEXT,1,100) as TEXT,
		    TO_CHAR(T103_POSTED_DATE,'YYYY/MM/DD')  as YMD,
		    T103_LINK_URL       as LINK_URL,
		    ''                  as ICON_URL ,
		    T103_POSTED_USER    as USR
		FROM
		    T103APALOG
		WHERE
		    T103_DELETE_FLG=0
		    AND T103_TENPO_CD='{$params['ShopCd']}'
			{$t103_oracle_text1}
		UNION
		SELECT
		    'blog'              as FLG ,
		    'apalog00000' || T103_ENTRY_ID  as ID,
		    T103_TENPO_CD       as TENPO_CD,
		    SUBSTR(T103_POSTED_TITLE || '　' || T103_POSTED_TEXT,1,100) as TEXT,
		    TO_CHAR(T103_POSTED_DATE,'YYYY/MM/DD')  as YMD,
		    T103_LINK_URL       as LINK_URL,
		    ''                  as ICON_URL ,
		    T103_POSTED_USER    as USR
		FROM
		    T103APALOG
		WHERE
		    T103_DELETE_FLG=0
		    AND T103_TENPO_CD='{$params['ShopCd']}'
			{$t103_oracle_text2}
		ORDER BY YMD DESC
	) TweetAndBlog
docEnd;

$sql = <<< docEnd
	{$sql_cmn}
	where
		rownum <= {$params['blog_page_no']}*{$params['blog_page_amount']}+{$params['blog_page_amount']}
	minus
	{$sql_cmn}
	where
		rownum <  {$params['blog_page_no']}*{$params['blog_page_amount']}+1
	order by YMD desc

docEnd;

    	return $sql;
    }

/* DBからアパログデータを取得する 2011.10.26 M.Nagata Start */
	/**
	 * 店舗詳細用のBlog情報を取得
	 * @param $M05_TENPO_CD
	 * @note
	 *		特定店舗のアパログのタイトルを新しい順に取得
	 */
    public function getApalogForShopDetail($M05_TENPO_CD)
    {
		//DBからデータを取得
		$apalogData = $this->getApalogDataForShopDetail($M05_TENPO_CD);
		//データを成形
		$apalogData = $this->convertApalogData($apalogData);
		
		//Blog情報を返却
		return $apalogData;
	}
	
	/**
	 * BlogタイトルをDBから取得
	 * @param $M05_TENPO_CD
	 * @note
	 *		特定店舗のアパログ情報を新しい順に取得
	 */
    private function getApalogDataForShopDetail($M05_TENPO_CD)
    {
		//定数宣言
		$get_count = 5;	//取得件数
		
		//変数宣言
		$db_params = array();	//データベースPrams（バインド変数）
		$sql = "";				//SQL文
		
		//バインド変数セット
		$db_params['ShopCd']   = $M05_TENPO_CD;	//店舗CD
		$db_params['GetCount'] = $get_count;	//取得件数
		
		//SQL文生成
		$sql =        " SELECT";
		$sql = $sql . "     *";
		$sql = $sql . " FROM";
		$sql = $sql . "    (SELECT";
		$sql = $sql . "         T103_LINK_URL";
		$sql = $sql . "        ,T103_POSTED_TITLE";
		$sql = $sql . "        ,TO_CHAR(T103_POSTED_DATE,'YYYY.MM.DD') AS T103_POSTED_DATE";
		$sql = $sql . "     FROM";
		$sql = $sql . "         T103APALOG";
		$sql = $sql . "     WHERE";
		$sql = $sql . "             T103_TENPO_CD = :ShopCd";
		$sql = $sql . "         AND T103_DELETE_FLG = '0'";
		$sql = $sql . "     ORDER BY";
		$sql = $sql . "         T103_POSTED_DATE DESC";
		$sql = $sql . "    ) T103";
		$sql = $sql . " WHERE";
		$sql = $sql . "     ROWNUM <= :GetCount";
		
		//SQL実行
		$ret = $this->dbGetList($sql, $db_params);
		
		//SQL実行結果を返却
		return $ret;
	}

	/**
	 * Blogデータを店舗詳細用に編集
	 * @param $apalogData
	 * @note
	 *		アパログ情報を店舗詳細へ表示用に編集する
	 */
	private function convertApalogData(&$apalogData)
	{
		//定数宣言
		$titleLength = 25;		//タイトル最大文字数
		
		//変数宣言
		$apalogInfo  = array();	//編集後データ格納
		$link        = "";		//アパログ用リンク
		$titleConvert= "";		//編集後タイトル
		
		//編集処理
		for ($i = 0; $i < count($apalogData); $i++)
		{
			//変数初期化
			$link = "";
			$titleConvert = "";
			
			//タイトルの編集（最大文字数分を抜き出し、機種依存文字をコードに変換）
			$titleConvert = Apm_Util::replaceUnicode(mb_substr($apalogData[$i]['T103_POSTED_TITLE'],0,$titleLength));
			
			//リンクの生成 【開始】
			$link =         "<a href=\"". $apalogData[$i]['T103_LINK_URL'] ."\">";
			$link = $link . $titleConvert; //タイトルを最大文字数以降カット
			
			//タイトルが最大文字数を超えた場合は、末尾に...を付与
			if(mb_strlen($apalogData[$i]['T103_POSTED_TITLE']) > $titleLength)
			{
				$link = $link . "...";
			}
			
			$link = $link . "</a>";
			//リンクの生成 【終了】
			
			//編集後データを詰める
			$apalogInfo[$i] = array(
				'cssday' => $apalogData[$i]['T103_POSTED_DATE'],
				'css10' => $link
			);
		}
		
		return $apalogInfo;
	}
/* DBからアパログデータを取得する 2011.10.26 M.Nagata Start */

}
?>
